/**************************************************************************************************
**
**  文件名称:  usbh_usr.c
**  版权所有:  CopyRight @ Xiamen Yaxon NetWork CO.LTD. 2019
**  文件描述:  USB HOST模式下的用户服务模块
**  ===============================================================================================
**  创建信息:  | 2019-3-3 | LEON | 创建本模块
**  ===============================================================================================
**  修改信息:  单击此处添加....
**************************************************************************************************/
#include "usb_include.h"
#include "usbh_usr.h"

#ifdef USB_HOST

/*************************************************************************************************/
//                           模块宏定义
/*************************************************************************************************/
#define USBH_INFROM_MAX      5                                                 /* USBH最大通知个数 */

/*************************************************************************************************/
//                           USB设备状态变更回调通知块
/*************************************************************************************************/
typedef struct {
    void                    (*inform)(USBH_STAT_E);
} USBH_INFORM_T;

/*************************************************************************************************/
//                           模块静态变量定义
/*************************************************************************************************/
static USBH_STAT_E           s_usbh_status;                                     /* USB设备当前状态 */
static USBH_INFORM_T         s_subh_inform[USBH_INFROM_MAX];

/*************************************************************************************************/
//                           USB设备状态变更回调处理函数
/*************************************************************************************************/
USBH_Usr_cb_TypeDef USR_Callbacks =
{
    USBH_USR_Init,
    USBH_USR_DeInit,
    USBH_USR_DeviceAttached,
    USBH_USR_ResetDevice,
    USBH_USR_DeviceDisconnected,
    USBH_USR_OverCurrentDetected,
    USBH_USR_DeviceSpeedDetected,
    USBH_USR_Device_DescAvailable,
    USBH_USR_DeviceAddressAssigned,
    USBH_USR_Configuration_DescAvailable,
    USBH_USR_Manufacturer_String,
    USBH_USR_Product_String,
    USBH_USR_SerialNum_String,
    USBH_USR_EnumerationDone,
    USBH_USR_UserInput,
    USBH_USR_MSC_Application,
    USBH_USR_DeviceNotSupported,
    USBH_USR_UnrecoveredError
};

/**************************************************************************************************
**  函数名称:  USBH_StatInform
**  功能描述:  USBH状态变更处理函数
**  输入参数:  无
**  输出参数:  无
**  返回参数:  无
**************************************************************************************************/
static void USBH_StatInform(USBH_STAT_E status)
{
    INT8U  i;
    
    if (s_usbh_status == status) {                                             /* 过滤重复调用 */
        return;
    }
    
    s_usbh_status = status;
    
    for (i = 0; i < USBH_INFROM_MAX; i++) {                                    /* 寻找注册过的回调函数接口 */
        if (s_subh_inform[i].inform != NULL) {
            s_subh_inform[i].inform(status);
        }
    }
}

/**************************************************************************************************
**  函数名称:  USBH_USR_Init
**  功能描述:  USB初始化函数
**  输入参数:  无
**  输出参数:  无
**  返回参数:  无
**************************************************************************************************/
void USBH_USR_Init(void)
{
    USBH_StatInform(USBH_STAT_INIT);
}

/**************************************************************************************************
**  函数名称:  USBH_USR_DeInit
**  功能描述:  USB设备去初始化函数
**  输入参数:  无
**  输出参数:  无
**  返回参数:  无
**************************************************************************************************/
void USBH_USR_DeInit(void)
{
    USBH_StatInform(USBH_STAT_DEINIT);
}

/**************************************************************************************************
**  函数名称:  USBH_USR_DeviceAttached
**  功能描述:  USB设备连接
**  输入参数:  无
**  输出参数:  无
**  返回参数:  无
**************************************************************************************************/
void USBH_USR_DeviceAttached(void)
{
    USBH_StatInform(USBH_STAT_ATTACHED);
}

/**************************************************************************************************
**  函数名称:  USBH_USR_ResetDevice
**  功能描述:  USB设备复位
**  输入参数:  无
**  输出参数:  无
**  返回参数:  无
**************************************************************************************************/
void USBH_USR_ResetDevice(void)
{
    USBH_StatInform(USBH_STAT_RESETDEVICE);
}

/**************************************************************************************************
**  函数名称:  USBH_USR_DeviceDisconnected
**  功能描述:  USB设备断开
**  输入参数:  无
**  输出参数:  无
**  返回参数:  无
**************************************************************************************************/
void USBH_USR_DeviceDisconnected(void)
{
    USBH_StatInform(USBH_STAT_DISCONNECTED);
}

/**************************************************************************************************
**  函数名称:  USBH_USR_OverCurrentDetected
**  功能描述:  USB设备过流检测
**  输入参数:  无
**  输出参数:  无
**  返回参数:  无
**************************************************************************************************/
void USBH_USR_OverCurrentDetected(void)
{
    USBH_StatInform(USBH_STAT_OVERCURRENT);
}

/**************************************************************************************************
**  函数名称:  USBH_USR_DeviceSpeedDetected
**  功能描述:  USB设备速率检测
**  输入参数:  无
**  输出参数:  无
**  返回参数:  无
**************************************************************************************************/
void USBH_USR_DeviceSpeedDetected(uint8_t DeviceSpeed)
{
    ;
}

/**************************************************************************************************
**  函数名称:  USBH_USR_Device_DescAvailable
**  功能描述:  USB设备可用
**  输入参数:  无
**  输出参数:  无
**  返回参数:  无
**************************************************************************************************/
void USBH_USR_Device_DescAvailable(void *DeviceDesc)
{
    ;
}

/**************************************************************************************************
**  函数名称:  USBH_USR_DeviceAddressAssigned
**  功能描述:  USB设备地址已分配
**  输入参数:  无
**  输出参数:  无
**  返回参数:  无
**************************************************************************************************/
void USBH_USR_DeviceAddressAssigned(void)
{
    ;
}

/**************************************************************************************************
**  函数名称:  USBH_USR_Configuration_DescAvailable
**  功能描述:  USB设备参数信息
**  输入参数:  无
**  输出参数:  无
**  返回参数:  无
**************************************************************************************************/
void USBH_USR_Configuration_DescAvailable(USBH_CfgDesc_TypeDef * cfgDesc, USBH_InterfaceDesc_TypeDef *itfDesc, USBH_EpDesc_TypeDef *epDesc)
{
    ;
}

/**************************************************************************************************
**  函数名称:  USBH_USR_Manufacturer_String
**  功能描述:  USB设备生产厂家信息
**  输入参数:  无
**  输出参数:  无
**  返回参数:  无
**************************************************************************************************/
void USBH_USR_Manufacturer_String(void *ManufacturerString)
{
    ;
}

/**************************************************************************************************
**  函数名称:  USBH_USR_Product_String
**  功能描述:  USB设备产品信息
**  输入参数:  无
**  输出参数:  无
**  返回参数:  无
**************************************************************************************************/
void USBH_USR_Product_String(void *ProductString)
{
    ;
}

/**************************************************************************************************
**  函数名称:  USBH_USR_SerialNum_String
**  功能描述:  USB设备序列号信息
**  输入参数:  无
**  输出参数:  无
**  返回参数:  无
**************************************************************************************************/
void USBH_USR_SerialNum_String(void *SerialNumString)
{
    ;
}

/**************************************************************************************************
**  函数名称:  USBH_USR_EnumerationDone
**  功能描述:  USB设备枚举完成
**  输入参数:  无
**  输出参数:  无
**  返回参数:  无
**************************************************************************************************/
void USBH_USR_EnumerationDone(void)
{
    USBH_StatInform(USBH_STAT_ENUMERATIONDONE);
} 

/**************************************************************************************************
**  函数名称:  USBH_USR_UserInput
**  功能描述:  USB设备用户输入
**  输入参数:  无
**  输出参数:  无
**  返回参数:  无
**************************************************************************************************/
USBH_USR_Status USBH_USR_UserInput(void)
{
    ;
    
    return USBH_USR_RESP_OK;
}

/**************************************************************************************************
**  函数名称:  USBH_USR_MSC_Application
**  功能描述:  USB设备MSC应用处理函数
**  输入参数:  无
**  输出参数:  无
**  返回参数:  无
**************************************************************************************************/
int USBH_USR_MSC_Application(void)
{
    USBH_StatInform(USBH_STAT_MSC_APPLICATION);
    
    return 0;
}

/**************************************************************************************************
**  函数名称:  USBH_USR_DeviceNotSupported
**  功能描述:  USB设备不支持
**  输入参数:  无
**  输出参数:  无
**  返回参数:  无
**************************************************************************************************/
void USBH_USR_DeviceNotSupported(void)
{
    USBH_StatInform(USBH_STAT_NOTSUPPORTED);
}

/**************************************************************************************************
**  函数名称:  USBH_USR_UnrecoveredError
**  功能描述:  USB不可恢复的错误
**  输入参数:  无
**  输出参数:  无
**  返回参数:  无
**************************************************************************************************/
void USBH_USR_UnrecoveredError(void)
{
    USBH_StatInform(USBH_STAT_UNRECOVEREDERROR);
}

/**************************************************************************************************
**  函数名称:  USBH_USR_Initiate
**  功能描述:  初始化
**  输入参数:  无
**  输出参数:  无
**  返回参数:  无
**************************************************************************************************/
void USBH_USR_Initiate(void)
{
    s_usbh_status = USBH_STAT_UNDEFINED;
    memset(s_subh_inform, 0, sizeof(s_subh_inform));
}

/**************************************************************************************************
**  函数名称:  USBH_USR_RegStatHdl
**  功能描述:  注册USB HOST状态变换的通知回调函数
**  输入参数:  无
**  输出参数:  无
**  返回参数:  无
**************************************************************************************************/
void USBH_USR_RegStatHdl(void (*inform)(USBH_STAT_E))
{
    INT8U i;
    
    for (i = 0; i < USBH_INFROM_MAX; i++) {
        if (s_subh_inform[i].inform == NULL) {
            s_subh_inform[i].inform = inform;
            return;
        }
    }
    
    //SYS_ASSERT(0);
}

#endif


